package com.gxa.hualian.controller;

import com.gxa.hualian.common.JsonResult;
import com.gxa.hualian.exception.BusinessException;
import com.gxa.hualian.pojo.User;
import com.gxa.hualian.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * @Author ChenJin
 * @date 2021/10/20 14:56
 * Description:
 **/
// 当用户发起 localhost:8080/user 请求，匹配到UserController控制器中
    //@RequestMapping 默认就支持post和get请求，相当于：
    //method = {RequestMethod.GET,RequestMethod.POST}
@RequestMapping(value = "/user",method = {RequestMethod.GET,RequestMethod.POST})
@Controller
@ResponseBody
@Transactional
public class UserController {

    @Autowired
    private UserService userService = null;

    @RequestMapping("/getString")
    public String getString(){
        System.out.println("请求进来了");

        // 如果一个方法只返回一个字符串，表示转发
        // 如果登陆成功跳转到主页：return”WEB-INF/jsp/index.jsp“
        // springmvc    跨域通过配置前缀和后缀的方式

        // 如果返回值要给前端返回，就需要@ResponseBody 响应体
        // @ResponseBody 可以加在方法上/类上（让所有方法是都采用该方法）
        return "index";
    }

    // springmvc在返回对象的时候，可以自动序列化返回json
    // 依赖第三方json工具：jackson

    // 处理参数：
    // 1.在方法中声明参数，Long id 表示前端传入的参数也必须命名为id
    // 还可以使用@RequestParam(参数名)，可以让前端的参数和方法参数可以不相同

    // 2.如果参数为多个
    // 2.1多个参数之间没有联系：多个参数  @RequestParam
    // 2.2有联系：多个参数可以注解注入到User目标对象上（参数名和字段名一致）
    // 2.3前端部署参数而是json字符串：@RequestBody
    // 2.4使用map接收：@RequestBody


    /**
     * 查询用户
     * @param id
     * @return
     */
    @RequestMapping("/get")
    public Map getUser(@RequestParam("id")Long id){
        JsonResult jsonResult = new JsonResult();
        User user = userService.selectById(id);
        jsonResult.setCode("1");
        jsonResult.setData(user);
        return jsonResult.getDataMap();

        /*System.out.println("id:"+id);
        User user = new User();
        user.setId(60L);
        user.setName("陈劲");
        user.setPhone("15907945221");
        return user;*/
    }

    // 带有分页信息
    public JsonResult getList(@RequestParam("page")Integer page, @RequestParam("size") Integer size){
        return null;
    }

    /**
     * 添加用户
     * @param user
     * @return
     */
    @RequestMapping("/insert")
    public Map<String, Object> insert(User user){
        JsonResult jsonResult = new JsonResult();
        int insert = userService.insert(user);
        System.out.println(insert);
        System.out.println(user);
        jsonResult.setCode("1");
        return jsonResult.getDataMap();
    }

    /**
     * 删除用户
     * @param id
     * @return
     */
    @RequestMapping("/delete")
    public Map<String, Object> delete(Long id){
//        System.out.println(id);
        JsonResult jsonResult = new JsonResult();
        try {
            userService.delete(id);
            jsonResult.setCode("1");
        } catch (BusinessException e) {
            jsonResult.setCode("0");
        }
        System.out.println(jsonResult);
        return jsonResult.getDataMap();
    }

    /**
     * 修改用户信息
     * @param user
     * @return
     * @throws BusinessException
     */
    @RequestMapping("/update")
    public Map<String, Object> update(User user) throws BusinessException {
        JsonResult jsonResult = new JsonResult();
//        System.out.println(user);
        Boolean update = userService.update(user);
//        System.out.println(update);
        if (update){
            jsonResult.setCode("1");
            jsonResult.setData(1);
            jsonResult.setMsg("123");
        }
        System.out.println(jsonResult);
        return jsonResult.getDataMap();
    }

    @RequestMapping("/insert2")
    public JsonResult insert2(@RequestBody  User user){
        System.out.println(user);
        return null;
    }

    @RequestMapping("/insert3")
    public JsonResult insert3(@RequestBody Map map){
        System.out.println(map);
        return null;
    }

    @RequestMapping("/selectAll")
    public Map selectAll(){
        List<User> users = userService.selectAll();
        JsonResult jsonResult = new JsonResult();
        jsonResult.setCode("1");
        jsonResult.setData(users);
        return jsonResult.getDataMap();
    }
    @RequestMapping("/selectByLimit")
    public Map selectByLimit(Integer page,Integer size){
        List<User> users = userService.selectByLimit(page, size);
        JsonResult jsonResult = new JsonResult();
        jsonResult.setCode("1");
        jsonResult.setData(users);
        return jsonResult.getDataMap();
    }
    @RequestMapping("/selectBySearch")
    public Map selectBySearch(String value){
        List<User> users = userService.selectBySearch(value);
        JsonResult jsonResult = new JsonResult();
        jsonResult.setCode("1");
        jsonResult.setData(users);
        return jsonResult.getDataMap();
    }

}
